Django keshini o'zlashtiring! Ushbu qo'llanma turli kesh dastaklari, kesh sozlamalari, shablon fragmenti keshini va veb-ilovalarning optimal ishlashini ta'minlash bo'yicha eng yaxshi amaliyotlarni o'z ichiga oladi.
Python Django Kesh Yordamida Kesh Freymvorkini Integratsiyalash bo'yicha To'liq Qo'llanma
Kesh yordamida saqlash veb-ilovalarning ishlashi va kengayishini yaxshilash uchun asosiy texnika hisoblanadi. Tez-tez foydalaniladigan ma'lumotlarni keshda saqlash orqali siz ma'lumotlar bazasi va serverdagi yukni kamaytirishingiz mumkin, bu esa tezroq javob berish muddatlari va yaxshiroq foydalanuvchi tajribasiga olib keladi. Django, yuqori darajadagi Python veb-freymvorki, ilovalaringizga kesh yordamida saqlashni oson integratsiyalash imkonini beruvchi kuchli va moslashuvchan kesh freymvorkini taqdim etadi.
Nima uchun Django'da Kesh Yordamida Saqlashdan Foydalanish Kerak?
Django kesh yordamida saqlash tafsilotlariga kirishdan oldin, uning taqdim etadigan asosiy foydalarini ko'rib chiqaylik:
- Yaxshilangan Ishlash: Kesh yordamida saqlash ma'lumotlar bazasi so'rovlari va boshqa qimmat operatsiyalar sonini kamaytiradi, bu esa sahifa yuklanish vaqtini sezilarli darajada tezlashtiradi.
- Kamaytirilgan Ma'lumotlar Bazasi Yoki: Keshdan ma'lumotlarni taqdim etish orqali siz ma'lumotlar bazasi serveridagi yukni kamaytirasiz, bu esa undan ko'proq so'rovlarni qayta ishlash imkonini beradi.
- Yaxshilangan Kengayish: Kesh yordamida saqlash ilovangizga qimmat apparat yangilashlarini talab qilmasdan ko'proq trafikni qayta ishlashga imkon beradi.
- Yaxshi Foydalanuvchi Tajribasi: Tezroq javob berish muddatlari yanada silliq va yoqimli foydalanuvchi tajribasiga olib keladi, bu esa foydalanuvchi jalb etish va qoniqishini oshiradi.
Django Kesh Freymvorki: Umumiy Ko'rinish
Django kesh freymvorki turli kesh dastaklari bilan o'zaro aloqada bo'lish uchun yagona interfeysni taqdim etadi. U kesh yordamida butun saytlarni, alohida ko'rinishlarni yoki ma'lum shablon fragmentlarini saqlash imkonini beruvchi turli darajadagi kesh yordamida saqlashni taklif etadi.
Kesh Dastaklari
Kesh dastagi kesh yordamida saqlangan ma'lumotlarni saqlash uchun ishlatiladigan asosiy saqlash mexanizmidir. Django bir nechta o'rnatilgan kesh dastaklarini, shuningdek, osongina integratsiyalash mumkin bo'lgan uchinchi tomon dastaklarini qo'llab-quvvatlaydi.
- Memcached: Yuqori samarali, taqsimlangan xotira ob'ektlarini kesh yordamida saqlash tizimi. Tez-tez foydalaniladigan ma'lumotlarni xotirada kesh yordamida saqlash uchun ideal.
- Redis: Xotiradagi ma'lumotlar tuzilmasi ombori, ma'lumotlar bazasi, kesh va xabar brokeri sifatida ishlatiladi. Redis Memcached dan ko'ra ilg'or xususiyatlarni taklif etadi, masalan, ma'lumotlar saqlanishi va pub/sub xabarlari.
- Ma'lumotlar Bazasi Kesh Yordamida: Kesh dastagi sifatida sizning ma'lumotlar bazangizdan foydalanadi. Bu rivojlanish yoki kichik ko'lamli joylashtirishlar uchun mos keladi, ammo samaradorlik cheklovlari tufayli ishlab chiqarish muhitlari uchun umuman tavsiya etilmaydi.
- Faylga Asoslangan Kesh Yordamida: Kesh yordamida saqlangan ma'lumotlarni fayl tizimidagi fayllarda saqlaydi. Bu rivojlanish yoki kichik ko'lamli joylashtirishlar uchun yana bir variant, ammo yuqori trafikli veb-saytlar uchun ideal emas.
- Mahalliy Xotira Kesh Yordamida: Kesh yordamida saqlangan ma'lumotlarni server xotirasida saqlaydi. Bu eng tezkor variant, ammo ko'p serverli muhitlar uchun mos emas.
Kesh Sozlamalari
Django kesh sozlamalari `settings.py` faylida sozlanadi. `CACHES` sozlamasi har bir kesh dastagi uchun konfiguratsiyani aniqlaydigan lug'atdir. Memcached ni sozlash uchun misol:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
Ushbu konfiguratsiya Django'ga Memcached kesh dastagidan foydalanishni va `127.0.0.1` (localhost) 11211 portida ishlayotgan Memcached serveriga ulanishni aytadi. Siz bir nechta kesh dastaklarini sozlash va ularga turli nomlar berish imkoniyatiga egasiz.
Asosiy Keshdan Foydalanish
Django kesh bilan o'zaro aloqada bo'lish uchun sodda APIni taqdim etadi. Siz keshdan ma'lumotlarni olish, o'rnatish va o'chirish uchun `django.core.cache` modulidan `cache` ob'ektidan foydalanishingiz mumkin.
from django.core.cache import cache
# Keshga qiymatni o'rnatish
cache.set('my_key', 'my_value', 300) # 300 soniya davomida saqlash
# Keshdan qiymatni olish
value = cache.get('my_key') # Agar kalit mavjud bo'lsa 'my_value' qaytaradi, aks holda None
# Keshdan qiymatni o'chirish
cache.delete('my_key')
Django'da Kesh Strategiyalari
Django turli ehtiyojlar va ilova arxitekturalariga mos keladigan bir nechta kesh strategiyalarini taklif etadi. Eng keng tarqalgan yondashuvlarni ko'rib chiqaylik:
Sayt Bo'yicha Kesh Yordamida Saqlash
Sayt bo'yicha kesh yordamida saqlash butun veb-saytning javobini kesh yordamida saqlaydi. Bu kesh yordamida saqlashning eng sodda shakli va kam o'zgaruvchan kontentga ega bo'lgan statik veb-saytlar yoki veb-saytlar uchun ishlashni sezilarli darajada yaxshilashi mumkin. Sayt bo'yicha kesh yordamida saqlashni yoqish uchun siz `settings.py` dagi `MIDDLEWARE` sozlamasiga `UpdateCacheMiddleware` va `FetchFromCacheMiddleware` ni qo'shishingiz kerak. Tartibning to'g'ri bo'lishi juda muhim. `UpdateCacheMiddleware` birinchi, `FetchFromCacheMiddleware` esa oxirgi bo'lishi kerak.
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
Shuningdek, kesh dastagi va kesh muddati tugashini belgilash uchun `CACHE_MIDDLEWARE_ALIAS` va `CACHE_MIDDLEWARE_SECONDS` sozlamalarini sozlash kerak.
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_SECONDS = 600 # 10 daqiqa davomida kesh yordamida saqlash
Muhim Eslatma: Sayt bo'yicha kesh yordamida saqlash odatda dinamik kontentga ega yoki shaxsiylashtirilgan foydalanuvchi tajribasiga ega bo'lgan veb-saytlar uchun mos emas, chunki u noto'g'ri yoki eskirgan ma'lumotlarning ko'rsatilishiga olib kelishi mumkin.
Ko'rinish Bo'yicha Kesh Yordamida Saqlash
Ko'rinish bo'yicha kesh yordamida saqlash alohida ko'rinishlarning natijasini kesh yordamida saqlashga imkon beradi. Bu sayt bo'yicha kesh yordamida saqlashdan ko'ra ko'proq granulali yondashuv va statik va dinamik kontent aralashmasiga ega bo'lgan veb-saytlar uchun mos keladi.
Siz `cache_page` dekoratoridan foydalanib ko'rinish bo'yicha kesh yordamida saqlashni yoqishingiz mumkin:
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) # 15 daqiqa davomida kesh yordamida saqlash
def my_view(request):
# ...
return render(request, 'my_template.html', {'data': data})
`cache_page` dekoratori kesh muddati tugashini soniyalarda argument sifatida qabul qiladi. U ko'rinish tomonidan yaratilgan butun javobni, shu jumladan shablonni va boshqa har qanday ma'lumotlarni kesh yordamida saqlaydi.
Shablon Fragmenti Kesh Yordamida Saqlash
Shablon fragmenti kesh yordamida saqlash shablonning ma'lum qismlarini kesh yordamida saqlashga imkon beradi. Bu eng granulali kesh yordamida saqlash yondashuvi va faqat ma'lum qismlari kesh yordamida saqlanishi kerak bo'lgan juda dinamik kontentga ega bo'lgan veb-saytlar uchun mos keladi.
Shablon fragmenti kesh yordamida saqlashdan foydalanish uchun siz shabloningizda `cache` shablon belgisi kutubxonasini yuklashingiz kerak:
{% load cache %}
Keyin siz kesh yordamida saqlamoqchi bo'lgan shablon fragmentini o'rash uchun `cache` belgisidan foydalanishingiz mumkin:
{% cache 500 sidebar %}
<!-- Yon panel kontenti -->
<ul>
{% for item in sidebar_items %}
<li>{{ item.title }}</li>
{% endfor %}
</ul>
{% endcache %}
`cache` belgisi ikkita argumentni qabul qiladi: soniyalarda kesh muddati tugashi va kesh kaliti prefiksi. Kesh kaliti prefiksi kesh yordamida saqlangan fragmentni aniqlash uchun ishlatiladi. Agar kontekstga qarab o'zgarish kerak bo'lsa, `vary on` parametrini quyidagicha ishlating:
{% cache 500 sidebar item.id %}
<!-- Yon panel kontenti -->
<ul>
{% for item in sidebar_items %}
<li>{{ item.title }}</li>
{% endfor %}
</ul>
{% endcache %}
Django prefiks va fragment ichida ishlatiladigan har qanday o'zgaruvchilarga asoslanib har bir fragment uchun avtomatik ravishda noyob kesh kalitini yaratadi. Shablon render qilinganda, Django fragment allaqachon kesh yordamida saqlanganligini tekshiradi. Agar shunday bo'lsa, Django fragmentni keshdan oladi va uni shablon ichiga joylashtiradi. Aks holda, Django fragmentni render qiladi va uni kelajakda foydalanish uchun keshda saqlaydi.
Misol: Xalqaro Yangiliklar Veb-sayti
Yangiliklar maqolalari, ob-havo prognozlari va fond birjasi narxlarini ko'rsatadigan xalqaro yangiliklar veb-saytini ko'rib chiqing. Yangiliklar maqolalari va ob-havo prognozlari tez-tez yangilanadi, fond birjasi narxlari esa kamroq yangilanadi. Bunday holatda, fond birjasi narxlari fragmentini kesh yordamida saqlash uchun shablon fragmenti kesh yordamida saqlashdan foydalanish mumkin, bu fond birjasi serveridagi yukni kamaytiradi.
{% load cache %}
<div class="news-article">
<h2>{{ article.title }}</h2>
<p>{{ article.content }}</p>
</div>
<div class="weather-forecast">
<h3>Ob-havo Prognozi</h3>
<p>{{ weather.temperature }}°C</p>
<p>{{ weather.description }}</p>
</div>
{% cache 3600 stock_quotes %}
<div class="stock-quotes">
<h3>Fond Birjasi Narxlari</h3>
<ul>
{% for quote in stock_quotes %}
<li>{{ quote.symbol }}: {{ quote.price }}</li>
{% endfor %}
</ul>
</div>
{% endcache %}
Keshni Bekor Qilish
Keshni bekor qilish keshdan eskirgan ma'lumotlarni olib tashlash jarayonidir. Keshda eng yangi ma'lumotlar mavjudligini ta'minlash juda muhim. Django keshni bekor qilishning bir nechta usullarini taqdim etadi:
- Vaqtga Asoslangan Muddati Tugashi: Kesh yordamida saqlangan ma'lumotlar uchun muddat tugashini belgilash, ma'lum vaqtdan so'ng u keshdan avtomatik ravishda olib tashlanishini ta'minlaydi. Bu keshni bekor qilishning eng sodda shaklidir.
- Vaqtinchalik Bekor Qilish: Siz `cache.delete()` usulidan foydalanib, kesh yozuvlarini vaqtincha bekor qilishingiz mumkin. Bu ma'lum hodisalarga asoslanib, ma'lum kesh yozuvlarini bekor qilishingiz kerak bo'lganda foydalidir.
- Signalga Asoslangan Bekor Qilish: Ma'lum modellar yaratilganda, yangilanganda yoki o'chirilganda kesh yozuvlarini bekor qilish uchun Django signallar freymvorkidan foydalanishingiz mumkin. Bu asosiy ma'lumotlar o'zgarganda kesh avtomatik ravishda yangilanishini ta'minlaydi.
- Versiyalashdan Foydalanish: Kesh kalitiga versiya raqamini qo'shing. Asosiy ma'lumotlar o'zgarganda, versiya raqamini oshiring. Bu Django'ni ma'lumotlar bazasidan yangilangan ma'lumotlarni olishga majbur qiladi.
Signalga Asoslangan Keshni Bekor Qilish Misoli
Aytaylik, sizda `Product` modeli bor va siz mahsulot yaratilganda, yangilanganda yoki o'chirilganda keshni bekor qilmoqchisiz. Buning uchun Django signallaridan foydalanishingiz mumkin.
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from django.core.cache import cache
from .models import Product
@receiver(post_save, sender=Product)
def product_saved(sender, instance, **kwargs):
cache.delete('product_list') # Mahsulotlar ro'yxati keshini bekor qilish
cache.delete(f'product_detail_{instance.id}') # Mahsulot batafsil keshini bekor qilish
@receiver(post_delete, sender=Product)
def product_deleted(sender, instance, **kwargs):
cache.delete('product_list') # Mahsulotlar ro'yxati keshini bekor qilish
cache.delete(f'product_detail_{instance.id}') # Mahsulot batafsil keshini bekor qilish
Ushbu kod ikkita signal qabul qiluvchini ro'yxatdan o'tkazadi: biri `post_save` signali uchun, ikkinchisi `post_delete` signali uchun. Har safar `Product` ob'ekti saqlanganida yoki o'chirilganda, mos keladigan signal qabul qiluvchi chaqiriladi va u `product_list` kesh yozuvini bekor qiladi. Bu mahsulotlar ro'yxati har doim yangi bo'lishini ta'minlaydi.
Muhim Eslatma: Keshni bekor qilish murakkab vazifa bo'lishi mumkin, ayniqsa tarqatilgan muhitlarda. Ilovingizning ma'lumotlar inklyuzivligi talablarini diqqat bilan ko'rib chiqish va mos keladigan bekor qilish strategiyasini tanlash muhimdir.
Django Kesh Yordamida Saqlash uchun Eng Yaxshi Amaliyotlar
Django ilovalaringizda kesh yordamida saqlashdan samarali foydalanish uchun quyidagi eng yaxshi amaliyotlarni ko'rib chiqing:
- Kesh Yordamida Saqlash Imkoniyatlarini Aniqlang: Ilovingizning ishlashini tahlil qiling va kesh yordamida saqlash eng katta ta'sir ko'rsatishi mumkin bo'lgan joylarni aniqlang. Tez-tez foydalaniladigan ma'lumotlar va qimmat operatsiyalarni kesh yordamida saqlashga e'tibor bering.
- To'g'ri Kesh Dastagini Tanlang: Ilovingizning samaradorlik, kengayish va ma'lumotlar saqlanishi bo'yicha talablariga javob beradigan kesh dastagini tanlang. Memcached va Redis odatda ishlab chiqarish muhitlari uchun yaxshi tanlovdir.
- Mos Keladigan Kesh Muddati Tugash Vaqtlarini O'rnating: Kesh yordamida saqlangan ma'lumotlar uchun kesh muddati tugashini diqqat bilan ko'rib chiqing. Juda qisqa muddat tugash vaqtlari kesh yordamida saqlashning foydasini yo'qqa chiqarishi mumkin, juda uzoq muddat tugash vaqtlari esa eskirgan ma'lumotlarga olib kelishi mumkin.
- Samarali Keshni Bekor Qilishni Joriylang: Keshda eng yangi ma'lumotlar mavjudligini ta'minlash uchun mustahkam keshni bekor qilish strategiyasini ishlab chiqing.
- Kesh Ishlashini Kuzating: Potentsial muammolarni aniqlash va konfiguratsiyani optimallashtirish uchun kesh ishlashini kuzating. Keshning urish tezligi va keshning chiqarib tashlash tezligini kuzatish uchun kesh statistikalaridan foydalaning.
- API Nuqtalarida Kesh Versiyalashdan Foydalaning: APIlar bilan ishlashda versiyalashni joriy qiling va versiya raqamini kesh kalitiga qo'shing. Bu siz API ning yangi versiyasini chiqarganingizda keshni osongina bekor qilishingizga imkon beradi.
- Kontent Yetkazib Berish Tarmoqlari (CDN) dan Foydalanishni Ko'rib Chiqing: Rasmlar, CSS fayllari va JavaScript fayllari kabi statik aktivlar uchun kontentingizni dunyo bo'ylab bir nechta serverlarga tarqatish uchun CDN dan foydalanishni ko'rib chiqing. Bu turli geografik joylardagi foydalanuvchilar uchun sahifa yuklanish vaqtini sezilarli darajada yaxshilashi mumkin.
Misol: Murakkab Ma'lumotlar Bazasi So'rovini Kesh Yordamida Saqlash
Aytaylik, siz bir nechta mezonlarga asoslanib mahsulotlar ro'yxatini oladigan murakkab ma'lumotlar bazasi so'roviga egasiz. Ushbu so'rov sekin va resurs talab qiluvchi bo'lishi mumkin. Ishlashni yaxshilash uchun siz ushbu so'rov natijalarini kesh yordamida saqlashingiz mumkin.
from django.core.cache import cache
from .models import Product
def get_products(category, price_range, availability):
cache_key = f'products_{category}_{price_range}_{availability}'
products = cache.get(cache_key)
if products is None:
products = Product.objects.filter(
category=category,
price__range=price_range,
availability=availability
)
cache.set(cache_key, products, 3600) # 1 soat davomida kesh yordamida saqlash
return products
Ushbu kod avval so'rov mezonlariga asoslangan kesh kalitini yaratadi. Keyin, agar natijalar allaqachon kesh yordamida saqlangan bo'lsa, natijalarni keshdan oladi. Aks holda, u ma'lumotlar bazasi so'rovini bajaradi, natijalarni kesh yordamida saqlaydi va ularni qaytaradi.
Ilg'or Kesh Yordamida Saqlash Usullari
Django kesh freymvorki yanada ilg'or kesh yordamida saqlash usullarini ham qo'llab-quvvatlaydi, masalan:
- So'rov Zarqovlariga Qarab O'zgarish: Siz keshni ma'lum so'rov zarqovlariga, masalan, `Accept-Language` zarqoviga qarab o'zgaruvchan natijalarni taqdim etishga sozlash mumkin. Bu sizga foydalanuvchining til afzalliklariga qarab turli kesh yordamida saqlangan kontentni taqdim etish imkonini beradi. Bu `Vary: Accept-Language` zarqovi yordamida amalga oshiriladi.
- Kesh Kalit Prefikslaridan Foydalanish: Tegishli kesh yozuvlarini bir joyga to'plash uchun kesh kaliti prefikslaridan foydalanishingiz mumkin. Bu bir vaqtning o'zida bir nechta kesh yozuvlarini bekor qilishni osonlashtiradi.
- Uchinchi Tomon Kesh Kutubxonalari bilan Integratsiya: Siz ularning ilg'or xususiyatlari va samaradorlik optimallashtirishlaridan foydalanish uchun Django kesh freymvorkini `django-redis` va `django-memcached` kabi uchinchi tomon kesh kutubxonalari bilan integratsiyalashishingiz mumkin.
- Shartli GET So'rovlari: HTTP ning shartli GET so'rovlaridan foydalaning. `ETag` yoki `Last-Modified` zarqovlaridan foydalanib, brauzer resurs o'zgarganligini tekshirishi mumkin. Agar o'zgarmagan bo'lsa, server 304 Not Modified javobini qaytaradi, bu esa tarmoqli kengligi va server resurslarini tejaydi.
Django Kesh Yordamida Saqlash: Xulosa
Kesh yordamida saqlash Django veb-ilovalarning ishlashi va kengayishini yaxshilash uchun zaruriy texnika hisoblanadi. Turli kesh strategiyalari, kesh dastaklari va keshni bekor qilish usullarini tushunish orqali siz kesh yordamida saqlashni ilovalaringizga samarali integratsiyalashishingiz va tezroq va yanada javob beradigan foydalanuvchi tajribasini taqdim etishingiz mumkin. Ilovingizning o'ziga xos talablarini diqqat bilan ko'rib chiqing va mos keladigan kesh strategiyasi va konfiguratsiyasini tanlang.
Ushbu qo'llanmada bayon etilgan eng yaxshi amaliyotlarga amal qilish orqali siz Django kesh yordamida saqlashning foydalarini maksimal darajada oshirishingiz va katta trafikni qayta ishlay oladigan yuqori samarali veb-ilovalarni yaratishingiz mumkin. Optimal ishlashni va uzluksiz foydalanuvchi tajribasini ta'minlash uchun kesh strategiyangizni doimiy ravishda kuzatib boring va optimallashtiring.